#ifndef _THREADPOOL_
#define _THREADPOOL_

#include "util.h"
#include "worker.h"
#include "taskQueue.h"
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>        // memset, bzero
#include <arpa/inet.h>     // inet_addr, htons, sockaddr_in 等
#include <netinet/in.h>    // sockaddr_in, INADDR_ANY
#include <sys/types.h>     // socket, bind 等
#include <sys/socket.h>    // socket, bind, listen, setsockopt    
#include <sys/epoll.h>
#include <fcntl.h>          // open, O_RDWR
#include <sys/stat.h>       // struct stat, fstat
#include <sys/sendfile.h>   // sendfile
#include <errno.h> 
#include <signal.h>
#include <sys/wait.h>


typedef struct threadPool_s {
    // 记录所有子线程信息
    tidArr_t tidArr;
    // 任务队列
    taskQueue_t taskQueue;
    // 锁
    pthread_mutex_t mutex;
    // 条件变量
    pthread_cond_t cond;
    // 退出标志位
    int exitFlag;
} threadPool_t;
int threadPoolInit(threadPool_t *pthreadPool, int workerNum);
int makeWorker(threadPool_t * pthreadPool);

int tcpInit(const char *ip, const char *port, int * psockfd);
int epollAdd(int epfd, int fd);
int epollDel(int epfd, int fd);
int transFile(int netfd);

#endif